package com.zbs.framework.swagger.view;

import com.zbs.framework.swagger.entity.ColumnsVo;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.util.StringUtils;

/**
 * <p>
 *
 * </p>
 *
 * @author Zbs
 * @since 2022-01-05
 */
@Getter
@Setter
@Accessors(chain = true)
public class ColumnsView {
    /**
     * 列名
     */
    private String columnName;
    /**
     * 列的默认值
     */
    private String columnDefault;
    /**
     * 是否可以取空值
     */
    private String isNullable;
    /**
     * 列的数据类型
     */
    private String dataType;

    /**
     * 长度
     */
    private Long maxLength;

    /**
     * 小数
     */
    private Long decimalPoint;

    /**
     * 列上的索引类型 主键-->PRI  | 唯一索引 -->UNI  一般索引 -->MUL
     */
    private String columnKey;
    /**
     * 备注
     */
    private String columnComment;

    public ColumnsView(ColumnsVo columnsVo) {
        this.columnName = columnsVo.getColumnName();
        this.columnDefault = StringUtils.hasLength(columnsVo.getColumnDefault()) ? columnsVo.getColumnDefault() : "";
        this.isNullable = columnsVo.getIsNullable();
        this.dataType = columnsVo.getDataType();
        this.columnKey = columnsVo.getColumnKey();
        this.columnComment = columnsVo.getColumnComment();
        this.maxLength = columnsVo.getCharacterMaximumLength() != null ? columnsVo.getCharacterMaximumLength() : columnsVo.getNumericPrecision();
        if (columnsVo.getDataType().equals("datetime")
                || columnsVo.getDataType().equals("longtext")
                || columnsVo.getDataType().equals("text")
                || columnsVo.getDataType().equals("timestamp")
                || columnsVo.getDataType().equals("longblob")
                || columnsVo.getDataType().equals("blob")
                || columnsVo.getDataType().equals("date")
                || columnsVo.getDataType().equals("tinyint")
                || columnsVo.getDataType().equals("tinytext")
                || columnsVo.getDataType().equals("year")
                || columnsVo.getDataType().equals("geometry")
                || columnsVo.getDataType().equals("geomcollection")
                || columnsVo.getDataType().equals("json")
                || columnsVo.getDataType().equals("linestring")
                || columnsVo.getDataType().equals("mediumblob")
                || columnsVo.getDataType().equals("mediumint")
                || columnsVo.getDataType().equals("mediumtext")
                || columnsVo.getDataType().equals("multilinestring")
                || columnsVo.getDataType().equals("multipoint")
                || columnsVo.getDataType().equals("multipolygon")
                || columnsVo.getDataType().equals("point")
                || columnsVo.getDataType().equals("polygon")
                || columnsVo.getDataType().equals("smallint")
                || columnsVo.getDataType().equals("time")
        ) {
            this.maxLength = columnsVo.getDataType().equals("time") ? 6L : 0L;
        }
        if (columnsVo.getNumericScale() == null || columnsVo.getCharacterMaximumLength() != null) {
            this.decimalPoint = 0L;
        } else {
            this.decimalPoint = columnsVo.getNumericScale();
        }


    }

}
